package collection.stream;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;
/**
 * 终端环节为流式操作的最后一步，用于获取结果
 */
public class StreamApiDemo2 {
    public static void main(String[] args) {
        Random rand = new Random();
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<10;i++){
            list.add(rand.nextInt(100)); //0到99的随机数
        }
        System.out.println(list);

        /*
         常见的终端环节:
         1.min:用于获取流中的最小值
         2.max:用于获取流中的最大值
         3.anyMatch:判断流中是否有元素匹配lambda表达式的要求
         4.reduce:积累操作

         Optional有点类似于包装类，内部保存了一个值，通过get()方法可以获取Optional中的值
         */
        //获取流中的最小值
        Optional<Integer> value = list.stream().min((e1,e2)->e1-e2);
        System.out.println("最小值:"+value.get());
        //获取流中的最大值
        value = list.stream().max((e1,e2)->e1-e2);
        System.out.println("最大值:"+value.get());
        //判断集合中是否有偶数
        boolean anyMatch = list.stream().anyMatch(e->e%2==0);
        System.out.println("是否有偶数:"+anyMatch);
        //对集合元素求和(累加所有集合元素)
        int number = list.stream().reduce((e1,e2)->e1+e2).get();
        System.out.println("累加和:"+number);
    }
}















